<?php

/**
 * Pagina forum.php 
 * Gestisce la grafica legata al forum
 */
// includo il file global.inc.php
require('php/inc/global.inc.php');



/**
 * Aggiunta di un topic ai preferiti 
 */
if (isset($_GET['mode']) && $_GET['mode'] == 'addfav') {

    // elimina post
    Topic::addToFavorite($_GET['id'], $user->username);
    KLogger::logToDB($user->username. " ha aggiunto il topic " . $_GET['id'] . " ai suoi preferiti", $user->username, KLOGGER::FORUM);
        

    // libero la sessione per evitare conflitti
    $str = $_SESSION['link'];
    unset($_SESSION['link']);

    // reindirizzo alla pagina precedente
    header($str);
}

/**
 * Rimozione di un topic dai preferiti 
 */
if (isset($_GET['mode']) && $_GET['mode'] == 'rmfav') {

    // elimina post
    Topic::removeFromFavorite($_GET['id'], $user->username);
    KLogger::logToDB($user->username. " ha rimosso il topic " . $_GET['id'] . " dai suoi preferiti", $user->username, KLOGGER::FORUM);
    
    // libero la sessione per evitare conflitti
    $str = $_SESSION['link'];
    unset($_SESSION['link']);

    // reindirizzo alla pagina precedente
    header($str);
}


/**
 * Eliminazione di un post
 */
if (isset($_GET['mode']) && $_GET['mode'] == 'de') {

    // elimina post
    Post::deletePost($_GET['id']);
    KLogger::logToDB($user->username. " ha eliminato il post " . $_GET['id'], $user->username, KLOGGER::FORUM);
    
    // libero la sessione per evitare conflitti
    $str = $_SESSION['link'];
    unset($_SESSION['link']);

    // reindirizzo alla pagina precedente
    header($str);
}

/**
 * Ricavo le categorie
 */
$categories = Category::getCategories();
$smarty->assign("categories", $categories);

/**
 * Creazione nuova discussione
 */
/**
 * Creazione di un post
 */
if (isset($_REQUEST['post'])) {

    // inserimento nuovo post
    // se il topic non è chiuso e l'utente che vuole postare il messaggio è loggato
    if ($_POST['topic_status'] == 1 && $user->isLogged()){
        $id = Post::insertPost($_POST['post_text'], $user->username, date("Y-m-d H:i:s", time()), $_POST['id_topic']);
        KLogger::logToDB($user->username. " ha scritto il post " . $id . " nel forum " . $_POST['id_topic'], $user->username, KLOGGER::FORUM);
    
    }
}

/**
 * Imposto il valore start per la paginazione
 */
if (isset($_GET['start'])) {
    $smarty->assign("start", $_GET['start']);
} else {
    $smarty->assign("start", 0);
}

/**
 * Eliminazione di una categoria o di un forum
 */
if(isset($_GET['mode']) && ($_GET['mode'] == 'category' || $_GET['mode'] == 'forum')){
    $mode = $_GET['mode'];
    if(isset($_GET['action']) && $_GET['action'] == 'remove'){
        if(isset($_GET['id'])){
            if($mode=='category'){
                $res = Category::removeCategory($_GET['id']);
                KLogger::logToDB($user->username . " ha eliminato la categoria ".$_GET['id'], $user->username, KLOGGER::FORUM);
        
            }else if($mode='forum'){
                $res = Forum::removeForum($_GET['id']);
                KLogger::logToDB($user->username . " ha eliminato il forum ".$_GET['id'], $user->username, KLOGGER::FORUM);
        
            }
                
        }
        header("location: forum.php");
    }
    
}

/**
 * Gestisco la grafica, visualizzando la sezione Forums o Topics a dipendenza dei valori in GET
 */
if (isset($_GET['mode'])) {
    if ($_GET['mode'] == 'forum') {
        if (isset($_GET['action']) && $_GET['action'] == 'add') {
            if (isset($_REQUEST['add_topic_submit'])) {
                // crea nuovo topic
                $id_topic = Topic::addTopic($_POST['topic_title'], $user->username, $_POST['topic_content'], $_POST['id_forum']);
                KLogger::logToDB($user->username . " ha creato il topic ".$_POST['topic_title'], $user->username, KLOGGER::FORUM);
        
                // reindirizzamento
                $str = "location: forum.php?mode=topic&id=" . $id_topic;
                header($str);
            }
            // creo formulario nuovo topic
            $new_topic_form = new Form("POST", "forum.php?mode=" . $_GET['mode'] . "&action=add");
            $smarty->assign("openTopicForm", $new_topic_form->openForm());
            $smarty->assign("closeTopicForm", $new_topic_form->closeForm());

            $smarty->assign("add_topic_title", $new_topic_form->createInput("topic_title", "topic_title", "text"));
            $smarty->assign("add_topic_content", $new_topic_form->createTextArea("topic_content", 10, 50));
            $smarty->assign("input_hidden_forumid", $new_topic_form->createInput("id_forum", "id_forum", "hidden", $_GET['id']));

            $smarty->assign("add_topic_submit", $new_topic_form->createInput("add_topic_submit", "add_topic_submit", "submit", "Crea"));
            $smarty->assign("action", $_GET['action']);
        }
        // carico il forum giusto
        $forum = Forum::getForum($_GET['id']);
    } else if ($_GET['mode'] == 'topic') {

        /**
         * Creo un link personalizzato e lo metto in sessione
         */
        $str = "location: forum.php?" . http_build_query($_GET, '', '&');
       

        // Ricavo i topic per un determinato forum
        $topic = Topic::getTopic($_GET['id']);

        // operazione per aprire e chiudere un topic
        if (isset($_GET['action'])) {
            // in caso lo voglio chiduere
            if ($_GET['action'] == 'close') {
                if ($user->username == $topic->creator) {
                    $topic->closeTopic();
                    $topic->status = 0;
                    KLogger::logToDB($user->username . " ha chiuso il topic ".$topic->name, $user->username, KLOGGER::FORUM);
        
                }
                // in caso lo voglio aprire
            } else if ($_GET['action'] == 'open') {
                if ($user->username == $topic->creator) {
                    $topic->openTopic();
                    $topic->status = 1;
                    KLogger::logToDB($user->username . " ha aperto il topic ".$topic->name, $user->username, KLOGGER::FORUM);
        
                }
            }else if ($_GET['action'] == 'delete') {
                if ($user->isAdmin()) {
                    $topic->deleteTopic();
                    $topic->visible = 0;
                    KLogger::logToDB($user->username . " ha eliminato il topic ".$topic->name, $user->username, KLOGGER::FORUM);
        
                }
                
                $str = "location: forum.php?mode=forum&id=".$topic->forum_id;
                header($str);
            }
        }
        
         $_SESSION['link'] = $str;

        // aggiorno visite
        $topic->addView();

        $smarty->assign("topic", $topic);

        // Ricavo tutte le informazioni del forum in cui sono
        $forum = Forum::getForum($topic->forum_id);

        /**
         * Creo la forum per mandare un nuovo post
         */
        //$post_form = new Form("POST", "forum.php?mode=".$_GET['mode']."&id=".$_GET['id']."&start=".(isset($_GET['start'])?$_GET['start']:0));
        $post_form = new Form("POST", "forum.php?mode=" . $_GET['mode'] . "&id=" . $_GET['id'] . "&start=" . (intval(($topic->getNrPosts()) / ($post_page)) * $post_page) . "#footer");
        $smarty->assign("openPostForm", $post_form->openForm());
        $smarty->assign("closePostForm", $post_form->closeForm());

        $smarty->assign("textarea_post", $post_form->createTextArea("post_text", 10, 50));
        $smarty->assign("input_hidden_topicid", $post_form->createInput("id_topic", "id_topic", "hidden", $_GET['id']));
        $smarty->assign("input_hidden_topicstatus", $post_form->createInput("topic_status", "topic_status", "hidden", $topic->status));

        $smarty->assign("submit_post", $post_form->createInput("post", "post", "submit", "Rispondi"));
        //$smarty->assign("form_error_reply", (isset($error_reply) ? $error_reply : ""));
    }

    if (isset($forum))
        $smarty->assign("forum", $forum);

    $smarty->assign("mode", $_GET['mode']);
    $smarty->assign("id_topic", $_GET['id']);
}





// carico l'HTML tramite smarty
$smarty->display($PAGES_URL . 'header.tpl');
$smarty->display($PAGES_URL . 'menu.tpl');
$smarty->display($PAGES_URL . 'forum.tpl');
$smarty->display($PAGES_URL . 'footer.tpl');
?>
